home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / c1.zip / READ.C < prev    next >
Text File  |  1987-06-18  |  2KB  |  60 lines

  1.  
  2. /************************************************************
  3.  *         IBM PC "C" Bulletin Board                        *
  4.  *         Tulsa, OK 918-664-8737                           *
  5.  *         SYSOP Lynn Long 300/1200 XMODEM                  *
  6.  ***********************************************************/
  7.  
  8. #include "io.h"
  9. #include "errno.h"
  10. #include "fcntl.h"
  11.  
  12. int badfd(), filerd(), conin();
  13.  
  14. static int (*readtab[])() = {
  15.         badfd, filerd, conin,
  16. };
  17. extern int errno;
  18.  
  19. read(fd, buff, len)
  20. char *buff;
  21. {
  22.         register struct channel *chp;
  23.  
  24.         if (fd < 0 || fd > MAXCHAN) {
  25.                 errno = EBADF;
  26.                 return -1;
  27.         }
  28.         chp = &chantab[fd];
  29.         return (*readtab[chp->c_read])(chp->c_arg, buff, len);
  30. }
  31.  
  32. conin(x,buff,len)
  33. char *buff;
  34. {
  35.         static char buffer[258] = { 0,0,0,0,0 };
  36.         static int used = 0;
  37.         register int l;
  38.  
  39.         if (buffer[1] == 0) {
  40.                 buffer[0] = 255;
  41.                 buffer[1] = buffer[2] = 0;
  42.                 bdos(10,buffer);
  43.                 bdos(2,'\n');
  44.                 if (buffer[2] == 0x1a) {
  45.                         buffer[1] = 0;
  46.                         return 0;
  47.                 }
  48.                 buffer[++buffer[1] + 1] = '\r';
  49.                 buffer[++buffer[1] + 1] = '\n';
  50.                 used = 2;
  51.         }
  52.         if ((l = buffer[1]) > len)
  53.                 l = len;
  54.         blockmv(buff, buffer+used, l);
  55.         used += l;
  56.         buffer[1] -= l;
  57.         return l;
  58. }
  59.  
  60.